package com.su27.document;

import java.awt.Color;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.List;

import com.su27.document.config.ConfigReader;
import com.su27.document.log.FileLog;
import com.su27.document.util.DocumentUtils;
import com.su27.document.util.FileUtil;
import com.su27.document.util.OfficeUtils;
import com.su27.document.util.PdfUtils;
import com.su27.document.watermark.WaterMark;
import com.sun.pdfview.PDFFile;

public class ConverterUtils {
	private static String KEY = null;//加密密钥
	static {
		try {
			KEY = ConfigReader.getString("key");
		} catch (IOException e) {
			FileLog.error("初始化key异常", e);
		}
	}
	
	/**
	 *对文件进行加密
	 * @param srcPath
	 * @param destPath
	 */
	public static void encryptDocument(String srcPath,String destPath) {
		FileOutputStream fos = null;
		try {
		DocumentUtils.encryptFiles(srcPath, destPath, KEY);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (fos != null) {
					fos.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void textWaterMark(String srcPath,String text) {
		List<String> files = FileUtil.getFilesFromPath(srcPath);
		String topText = text;//水印内容
		int textStyle = 100;//字体的类型
		int textSize = 50;//字体的大小
		float gradient = 16.0F;//斜率
		Color color = Color.lightGray;//画笔绘制字体时的颜色,要求填写RGB
		int location = 9;//图片为9块，从上到下，从左到右依次为1:左上，2:中上，3:右上，4:左中 ，5：中，6：右中，7：左下，8：中下，9：右下 以此来定义该选择区域的位置
		int fontNum = 4;//文字水印的个数
		float alpha = 0.5F;//设置图片的透明度(该透明度的范围在0~1之间)
		for (String file : files) {
			WaterMark.markStrForImg(srcPath+File.separator+file, topText, textStyle, textSize, gradient, color, location, fontNum, alpha);
		}
	}
	
	public static void imgWaterMark(String srcPath,String imgPath){
		List<String> files = FileUtil.getFilesFromPath(srcPath);
		
		int location = 2;//图片为9块，从上到下一次为1:左上方，2:右上方，3:左下方，4:右下方 以此来定义该选择区域的位置
		int topImgTimes = 1;//水印放大倍数
		float alpha = 0.5F;//设置图片的透明度(该透明度的范围在0~1之间)
		for (String file : files) {
			WaterMark.markImgForImg(srcPath+File.separator+file, imgPath,location,topImgTimes,alpha);
		}
	}
	
	public static int getFilePage(String documentFile) throws Exception{
		File document = new File(documentFile);

		if (!document.exists()) {
			throw new FileNotFoundException(documentFile + "无此文件");
		}
		String fileType = FileUtil.getFileType(document);
		FileLog.info(documentFile + "文件类型：" + fileType);
		String TEMP_FILE_PATH = ConfigReader.getString("temp.file.path");
		String temp = TEMP_FILE_PATH + File.separator + File.separator
				+ System.currentTimeMillis() + ".pdf";


		String pdfFile = temp;
		if (FileUtil.isOfficeFileType(fileType)) {
			boolean DConvertFlag = OfficeUtils.DocumentConvert(documentFile,
					temp);
			if (!DConvertFlag) {
				throw new Exception("Office文件转换临时文件失败");
			}


		} else if ("pdf".equalsIgnoreCase(fileType)) {
			pdfFile = documentFile;
		} else {
			throw new Exception("暂不支持此类型文件转换:" + fileType);
		}
		
		File file = new File(pdfFile);
		RandomAccessFile raf = new RandomAccessFile(file, "r");
		FileChannel channel = raf.getChannel();
		ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel
				.size());
		PDFFile pdffile = new PDFFile(buf);

		int pages = pdffile.getNumPages();
		
		return pages;
	}
}
